﻿#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
////联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	//计算联合体变量的大小
//	printf("%zd\n", sizeof(un)); 
//	return 0;
//}

////代码1
//#include <stdio.h>
////联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	// 下⾯输出的结果是一样的吗？
//	printf("%p\n", &(un.i));
//	printf("%p\n", &(un.c));
//	printf("%p\n", &un);
//	return 0;
//}

////代码2
//#include <stdio.h>
////联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	un.i = 0x11223344;
//	un.c = 0x55;
//	printf("%x\n", un.i);
//	return 0;
//}

//struct S
//{
//	char c;
//	int i;
//};
//struct S s = { 0 };
//
//union Un
//{
//	char c;
//	int i;
//};
//union Un un = { 0 };

//#include <stdio.h>
//union Un1
//{
//	char c[5];
//	int i;
//};
//union Un2
//{
//	short c[7];
//	int i;
//};
//int main()
//{
//	//下面输出的结果是什么？
//	printf("%d\n", sizeof(union Un1));
//	printf("%d\n", sizeof(union Un2));
//	return 0;
//}

//struct gift_list
//{
//	//公共属性
//	int stock_number;//库存量
//	double price; //定价
//	int item_type;//商品类型
//
//	//特殊属性
//	char title[20];//书名
//	char author[20];//作者
//	int num_pages;//⻚数
//
//	char design[30];//设计
//	int colors;//颜色
//	int sizes;//尺寸
//};

//struct gift_list
//{
//	//公共属性
//	int stock_number;//库存量
//	double price; //定价
//	int item_type;//商品类型
//
//	//特有属性，使用联合体
//	union {
//		struct
//		{
//			char title[20];//书名
//			char author[20];//作者
//			int num_pages;//页数
//		}book;
//		struct
//		{
//			char design[30];//设计
//		}mug;
//		struct
//		{
//			char design[30];//设计
//			int colors;//颜色
//			int sizes;//尺寸
//		}shirt;
//	}item;
//};

//int check_sys()
//{
//	union
//	{
//		int i;
//		char c;
//	}un;
//	un.i = 1;
//	return un.c;//返回1是小端，返回0是大端
//}

//enum Day//星期
//{
//	Mon,
//	Tues,
//	Wed,
//	Thur,
//	Fri,
//	Sat,
//	Sun
//};
//enum Sex//性别
//{
//	MALE,
//	FEMALE,
//	SECRET
//};
//enum Color//颜⾊
//{
//	RED,
//	GREEN,
//	BLUE
//};
//
//enum Color//颜色
//{
//	RED = 0,
//	GREEN = 4,
//	BLUE = 5
//};

//#include<stdio.h>
//
//enum Color//颜色
//{
//	RED = 1,
//	GREEN = 2,
//	BLUE = 4
//};
//
//int main()
//{
//	enum Color clr = GREEN;//使用枚举常量给枚举变量赋值
//	enum Color clr2 = 2;//这样在C语言中是可以的，但在C++中，由于更严格的检查，这样是不行的
//	enum Color clr3 = 3;//使用 int 类型给枚举类型赋值可能会出现这样的情况，3并不是某个枚举常量的值，但并不会报错
//
//	printf("%d ", clr3);
//
//	return 0;
//}


////使用回到函数改造后，再使用枚举
//#include <stdio.h>
//int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}
//
//enum calc_num
//{
//	END,
//	ADD,
//	SUB,
//	MUL,
//	DIV
//};
//
//void calc(int(*pf)(int, int))//看一看这个函数，它的参数是一个函数指针，而且这个函数指针的		
//{							 //类型恰好和上面的4个计算用的函数类型相同
//	int ret = 0;
//	int x, y;
//	printf("输入操作数：");
//	scanf("%d %d", &x, &y);
//	ret = pf(x, y);	//调用 calc 函数，会调用传参过来的函数，这就是回调函数
//	printf("ret = %d\n", ret);
//}
//int main()
//{
//	int input = 1;
//	do
//	{
//		printf("*************************\n");
//		printf("	1:add 2:sub \n");
//		printf("	3:mul 4:div \n");
//		printf("*************************\n");
//		printf("请选择：");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case ADD:
//			calc(add);//这里调用 calc 函数实际上是是在通过 calc 函数调用其他的函数
//			break;
//		case SUB:
//			calc(sub);
//			break;
//		case MUL:
//			calc(mul);
//			break;
//		case DIV:
//			calc(div);
//			break;
//		case END: printf("退出程序\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//	return 0;
//}
